Speech systems have been incorporated into many useful applications so that users may utilize the applications without having to manually operate an input device, such as a mouse or a keyboard. Personal computer systems (desktop, laptop, handheld, etc.) and automobile systems are only two examples of systems, or platforms, that may include integrated speech recognition functions.
A single platform may have several applications executing at a given time. For example, in an automobile computer system that utilizes speech recognition software, there may be speech-enabled applications for radio operation, navigational tools, climate controls, mail, etc. Personal computers may include word processors, spreadsheets, databases and/or other programs that utilize speech recognition. Each speech-enabled application has a grammar associated with it that is a set of commands that the application is attempting to detect at any one time.
Different applications may have different grammars. For instance, a word processing speech-enabled application may use a grammar that enables it to detect the command “print.” However, an automobile speech-enabled application that controls a car radio would not have such a command. On the other hand, the car radio application may have a grammar that enables the speech system to recognize the command “FM” to set the radio to the FM band. The word processor would not waste overhead by including an “FM” command in its relevant grammar.
As the number of speech-enabled applications and grammars has increased, it has become increasingly problematic to run multiple speech-enabled applications on a single platform. Although each speech-enabled application may have its own unique grammar, certain commands may be used in more than one grammar, e.g., “stop.” When a speech system receives such a command, it must be able to determine which application the speaker directed the command to and which application should respond to the user.
Similarly, multiple speech-enabled applications may attempt to deliver speech feedback simultaneously. This can result in a garbled communication that a user cannot understand. Such a result renders one or more of the applications useless. Also, if speech feedback from one speech-enabled application interrupts speech feedback from another similar application, the feedback from one or both applications may not be understandable to a user.
For example, suppose a first application asks a question of the user and awaits a response. But before the user responds to the first application, a second application asks the user a question. Which application will accept the user's first answer? Will one of the applications accept an answer intended for the other application? Will either application be able to function properly with the response(s) it receives? With no control over specific interactions between the system and the user, there is no certain answer to any of these questions.
One method that has been devised to handle this problem is to create a ‘token’ that indicates which application has the right to execute at any given time. When an application is ready to execute it requests a token. When the application receives the token, the application may execute.
One of several drawbacks of such a system is that applications may crash or hang. If an application that currently holds the token crashes, then the system may not recover unless the system is prepared for application crashes. If the application hangs, then the system may never be able to regain control. Therefore, a token system is an inadequate solution to the problems encountered when attempting to execute multiple speech-enabled applications.
Another problem that is encountered by speech-enabled applications is that when a command is given to an application that is not currently running, the command simply falls on deaf ears, so to speak, and there is no response to the command. Therefore, a user must first manually or vocally launch the application, then speak the desired command for the application. This means that a user must always be aware of which applications are running and which are not, so that the user knows whether she must launch an application before issuing certain commands. For example, if an automobile driver wants to play “song_A.mp3” on a car radio, the driver must first issue a command or manually launch an MP3 player, then command the player to play “song_A.” It would be desirable to minimize the actions required to launch an application and subsequently issue a command.